package controllers

import (
	"fmt"
	"sdrms_test/enums"
	"sdrms_test/models"
	"strings"

	// "strings"

	"github.com/astaxie/beego"
)

type BaseController struct {
	beego.Controller
	// 当前控制名称
	controllerName string
	// 当前action名称
	actionName string
	//当前用户信息
	curUser models.BackendUser
}

func (c *BaseController) Prepare() {
	//fmt.Println("Prepare")

	c.controllerName,c.actionName = c.GetControllerAndAction()

	c.adapterUserInfo()

}

//从session里取用户信息
func (c *BaseController) adapterUserInfo() {
	a := c.GetSession("backenduser")
	if a != nil {
		c.curUser = a.(models.BackendUser)
		c.Data["backenduser"] = a
	}
}

func (c *BaseController) checkLogin() {
	fmt.Println("checkLogin")
	fmt.Println(c.curUser.Id )
	if c.curUser.Id == 0 {

		//登录页面地址,这里的地址，必须要在router.go里面注册
		urlstr := c.URLFor("HomeController.Login") + "?url="


		//登录成功后返回的址为当前
		returnUrl := c.Ctx.Request.URL.Path

		//如果ajax请求则返回相应的错码和跳转的地址
		if c.Ctx.Input.IsAjax() {
			//由于是ajax请求，因此地址是header里的Referer
			returnUrl := c.Ctx.Input.Refer()
			c.jsonResult(enums.JRCode302,"请登录",urlstr+returnUrl)
		}
		c.Redirect(urlstr+returnUrl,302)
		c.StopRun()
	}
}

// 设置模板
// 第一个参数模板，第二个参数为layout
func (c *BaseController) setTpl(template ...string) {
	var tplName string
	layout := "shared/layout_page.html"
	switch {
		case len(template) == 1:
			tplName = template[0]
		case len(template) == 2:
			tplName = template[0]
			layout = template[1]
		default:
			//不要Controller这个10个字母
			ctrlName := strings.ToLower(c.controllerName[0 : len(c.controllerName)-10])
			actionName := strings.ToLower(c.actionName)
			tplName = ctrlName + "/" + actionName + ".html"
	}
	fmt.Println(layout)
	fmt.Println(tplName)
	c.Layout = layout
	c.TplName = tplName
}

func (c *BaseController) jsonResult(code enums.JsonResultCode,msg string,obj interface{}) {
	r := &models.JsonResult{code,msg,obj}
	c.Data["json"] = r
	c.ServeJSON()
	c.StopRun()
}

//SetBackendUser2Session 获取用户信息（包括资源UrlFor）保存至Session
func (c *BaseController) setBackendUser2Session(userId int) error {
	m, err := models.BackendUserOne(userId)
	if err != nil {
		return err
	}
	//获取这个用户能获取到的所有资源列表
	resourceList := models.ResourceTreeGridByUserId(userId, 1000)
	fmt.Println("======")
	fmt.Println(resourceList)
	fmt.Println("======")

	for _, item := range resourceList {
		m.ResourceUrlForList = append(m.ResourceUrlForList, strings.TrimSpace(item.UrlFor))
	}
	c.SetSession("backenduser", *m)
	return nil
}

// 重定向 去错误页
func (c *BaseController) pageError(msg string) {
	errorurl := c.URLFor("HomeController.Error")
	c.Redirect(errorurl,302)
	c.StopRun()
}

// 重定向 去登录页
func (c *BaseController) pageLogin()  {
	url := c.URLFor("HomeController.Login")
	c.Redirect(url,302)
	c.StopRun()
}